package controllers;


import java.util.ArrayList;
import java.util.List;

import dao.DAOJogador;

import models.Jogador;
import play.Logger;
import play.libs.F.Callback;
import play.mvc.Controller;
import play.mvc.Result;
import play.mvc.WebSocket;

public class JogoController extends Controller {
	
	public static List <Jogador> jogadores = new ArrayList<>();
	public static List <WebSocket.Out<String>> conexoes = new ArrayList<>();
	
	
	public static final int COMANDO_OPERACAO = 0;
	public static final int OPERACAO_ENTRADA_JOGADOR = 0;
	
	public static final int COMANDO_LISTAR_USUARIO = 1;
	
	public static final int COMANDO_SAIR_SALA = 2;
	
	public static String mensagem;
	

	public static Result index() {
		return ok(views.html.jogo.jogo.render());
	}
	
	public static WebSocket<String> sockHandler() {
		return new WebSocket<String>() {
			// called when the websocket is established
			public void onReady(WebSocket.In<String> in, WebSocket.Out<String> out) {
				mensagem = "";
				// register a callback for processing instream events
				in.onMessage(new Callback<String>() {
					public void invoke(String event) {
						
						String [] comandos = event.split("###");
						System.out.println("["+ event +"]");
						
						for (String comando : comandos) {
							String [] comando_parte = comando.split(":");
							String [] comando_sub_parte = comando_parte[1].split("#");
							System.out.println("["+ comando_parte[0] +"] ["+ comando_sub_parte[0] +"] ["+ comando_sub_parte[1] +"]");	
							switch (Integer.parseInt(comando_parte[0])) {
								case COMANDO_OPERACAO: {
									System.out.println("COMANDO_OPERACAO");
									switch (Integer.parseInt(comando_sub_parte[0])) {
										case OPERACAO_ENTRADA_JOGADOR: {
											System.out.println("OPERACAO_ENTRADA_JOGADOR");
											DAOJogador dao = new DAOJogador();
											try {
												jogadores.add(dao.select(Integer.parseInt(comando_sub_parte[1])));
											} catch (Exception e) {
												e.printStackTrace();
											}
											
											
											String jogadors = "";
											for (Jogador j : jogadores) {
												jogadors += j.apelido +",";
											}
											mensagem = COMANDO_LISTAR_USUARIO +":"+ jogadors;
											break;
										}
	
										default: {
											break;
										}
									}
									
									break;
								}
		
								default: {
									break;
								}
							}
						}
						
						
						Logger.info(event);
						
						
						
					}
				});

				// write out a greeting
				//out.write("I'm contacting you regarding your recent websocket.");
				System.out.println("out:["+ mensagem +"]");
				out.write(mensagem);
	
			}
		};
	}
	

}
